使用 iptables 转发,同时正确保留源 IP |
您所在的位置:网站首页 › iptables 添加不连续的源ip › 使用 iptables 转发,同时正确保留源 IP |
或者添加手动重定向(下面的冗长设置几乎可以自动完成) 每当容器重新启动时,它的(内部)IP 地址都存在更改的风险。所以必须计算这个。因此,对于mx使用命名网络命名的容器mx和涉及单个 IP 地址的容器,可以如下所述完成。 创建一个单独的预路由链(这样就可以刷新它而无需刷新其他任何东西)并首先调用它: iptables -t nat -N mynat iptables -t nat -I PREROUTING -j mynat可以通过编程方式检索容器的 IP 地址(对于mx使用单个地址命名的容器的简单情况): containerip=$(docker container inspect --format '{{.NetworkSettings.IPAddress}}' mx)(或者可以使用jq:)containerip=$(docker container inspect mx | jq '.[].NetworkSettings.IPAddress' 查找网桥接口名称更加复杂,或者至少我找不到仅使用docker ... inspect. 因此,在主机上找到它的 IP 地址并使用它查询主机ip address以仅找到设置了该特定 IP 地址的桥接接口(需要该jq命令。) bridgeip=$(docker network inspect --format '{{(index .IPAM.Config 0).Gateway}}' mx) bridgeinterface=$(ip -json address show to "$bridgeip"/32 | jq -r '.[].ifname')mynat每次(重新)启动容器时刷新并重新填充: iptables -t nat -F mynat iptables -t nat -A mynat ! -i "$bridgeinterface" -p tcp --dport 25 -j DNAT --to-destination "$containerip":25这将适用于当前情况: iptables -t nat -I mynat !-i br-b147ffdbc9f3 -p tcp --dport 25 -j DNAT --to-destination 172.18.0.2:25 为了确保 Docker 自己的防火墙规则不会阻止此类流量,请FORWARD从DOCKER-USER链中的 filter/ 开始执行类似的操作。 最初(如果从引导开始,您可能还必须先创建DOCKER-USER): iptables -N myforward iptables -I DOCKER-USER 1 -j myforward然后以后每次(重新)启动容器时: iptables -F myforward iptables -A myforward -p tcp ! -i "$bridgeinterface" -d "$containerip" -p tcp --dport 25 -j ACCEPT这将适用于当前情况: iptables -A myforward -p tcp ! -i br-b147ffdbc9f3 -d 172.18.0.2 -p tcp --dport 25 -j ACCEPT |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |